const { graphql, buildSchema } = require('graphql')
const express = require('express')
const { graphqlHTTP } = require('express-graphql')
const cors = require('cors')
const { userInfo } = require('os')

const app = express()

app.use(cors())

// 1. 使用Graphql schema语法构建一个schema
const schema = buildSchema(`
  type Score {
    name: String
    score: Int
  }

  type User {
    name: String!
    age: Int
    hobbies: [String!]!
    scores: [Score]
  }

  type Article {
    title: String
    body: String
    author: User
  }

  type Query {
    foo: String
    count: Int
    salary: Float
    user: User,
    article: Article
  }
`)

// 2. 定义schema的resolver
const rootValue = {
  foo () {
    return 'bar'
  },
  count () {
    return  123
  },
  salary() {
    return 21.232
  },
  user() {
    return {
      name: 'zhangsan',
      age: 20,
      hobbies: ['吃饭','运动'],
      scores: [
        {
          name: '关羽',
          score: 54
        },
        {
          name: '张飞',
          score: 65
        },
        {
          name: '刘备',
          score: 98
        }
      ]
    }
  },
  article() {
    return {
      title: '文章洒洒水',
      body: '内容----',
      author: {
        name: '刘璋',
        age: 56
      }
    }
  }
}

// 3. 挂载Graphql中间件
app.use('/graphql', graphqlHTTP({
  schema,
  rootValue,
  graphiql: true // 开启调试IDE
}))

app.listen(4000, () => {
  console.log('Graphql Server is running')
})

// {
//   foo
//   count
//   salary
//   user {
//     name
//     age,
//     hobbies,
//     scores{
//       name
//       score
//     }
//   }
//   article {
//     title
//     body
//     author {
//       name
//       age
//     }
//   }
// }



// {
//   "data": {
//     "foo": "bar",
//     "count": 123,
//     "salary": 21.232,
//     "user": {
//       "name": "zhangsan",
//       "age": 20,
//       "hobbies": [
//         "吃饭",
//         "运动"
//       ],
//       "scores": [
//         {
//           "name": "关羽"
//         },
//         {
//           "name": "张飞"
//         },
//         {
//           "name": "刘备"
//         }
//       ]
//     },
//     "article": {
//       "title": "文章洒洒水",
//       "body": "内容----",
//       "author": {
//         "name": "刘璋",
//         "age": 56
//       }
//     }
//   }
// }